AWS EBS CSI Driver
개요
4.RESOURCE/KNOWLEDGE/AWS/AWS의 Amazon EBS를 스토리지로 지원하는 CSI 드라이버.
개념 자체는 다른 csi와 다르지 않다.
다만 몇가지 특징을 짚어보자면..
블록 스토리지를 제공하는데, 같은 AZ에서 사용할 수 있다.
aws의 툴들이 으레 그렇듯이, IRSA를 필요로 한다.
aws api를 이용해 ebs를 요청해야 하기 때문이다.
구조
악분님이 간단하게 그림을 그려두신 게 보기 좋다.[1]
사실 모든 csi 드라이버가 돌아가는 방식이 이렇긴 한데, 아무튼 각 노드에 마운팅을 담당하는 파드와 aws api에 요청을 보내는 컨트롤러 파드가 따로 존재한다.
이를 위해서 드라이버의 데몬셋이 api를 온전히 사용히야 하며, 적절한 IAM 정책을 가지고 있어야만 한다.
만약 일련의 세팅 없이 애드온을 설치하게 되면 만들어진 PVC 이벤트에는 could not create volume in EC2: UnauthorizedOperation
라는 에러가 뜨게 된다.
설치
IAM 설정
ebs 드라이버는 EKS에서는 간단하게 애드온으로도 설치할 수 있다.
그러나 드라이버의 데몬셋이 api를 온전히 사용하기 위해서는 언급했듯이 적절한 IAM 정책을 가지고 있어야만 한다.
만약 일련의 세팅 없이 애드온을 설치하게 되면 만들어진 PVC 이벤트에는 could not create volume in EC2: UnauthorizedOperation
라는 에러가 뜨게 된다.
최소한 aws에서는 해당 정책을 미리 만들어 제공해주고 있다.
근데 왜 ALB Controller에 대해서는 이렇게 정책을 지원해주지 않을까?
애초에 애드온으로 지원하지 않는 이유에 대해서도 궁금증이 생겼다.
관련한 논의가 진행되고 있는 것이 있다.[2]
그러나 20년도에 이야기가 시작되었으나, 아직까지 명쾌한 로드맵도, 답변도 없는 상태로 보인다.
나도 최근 테라폼으로 세팅을 자동화하는데 있어서 간편한 세팅에 아쉬움을 느끼고 있다.
로밸컨이 세팅해야 할 게 많아서?
라는 게 이유가 되나?
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster my-cluster \
--role-name AmazonEKS_EBS_CSI_DriverRole \
--role-only \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve
eksctl을 사용한다면 이렇게 설정해주면 될 것이다.
테라폼에서 설정한다면 애드온을 세팅하면서 추가 정책을 부여해주는 방식으로 가능하다.[3]
그런데 이게 IRSA를 하는 게 아니라 노드 자체에 정책을 붙이는 것으로 보여서 조금은 확인해봐야할 것 같다.
옵션
드라이버 옵션
드라이버를 실행할 때 줄 수 있는 인자는 다음과 같다.
- endpoint
- 기본값
unix:///var/lib/csi/sockes/pluginproxy/csi.sock
- 드라이버가 통신할 csi rpc
- 기본값
- batching
- 기본 true로, api 요청을 배치 처리한다.
- 과도한 요청이 발생하면 ec2의 제한에 걸릴 수 있기 때문에, 배치 처리가 기본이다.
스토리지 클래스 옵션
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
csi.storage.k8s.io/fstype: xfs
type: io1
iopsPerGB: "50"
encrypted: "true"
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- us-east-2c
스토리지 클래스로 둘 수 있는 옵션.
흔히 건드리는 설정들 위주로 보겠다.
- csi.storage.k8s.io/fstype
- xfs, ext3, ext4
- 파일 스토리지 유형으로, 기본값은 ext4이다.
- type
- io1, io2, gp2, gp3, sc1, st1, standard, sbp1, sbg1
- 기본값은 ec2의 기본값인 gp3이다.
- iops
- io1, io2, gp3에서 명시할 수 있는 iops값
- 초 단위로 설정한다.
- throughput
- Mib/s 로 설정한다.
- gp3일 때만 작동하는 값이며, 기본값은 125 Mib/s이다.
- kmsKeyId
- Amazon KMS의 arn.
관련 문서
이름 | noteType | created |
---|